package com.ck.ips.dao;


import com.ck.common.model.DeviceUpgrade;
import com.ck.ips.model.vo.DeviceUpgradeInfoVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @description: deviceUpgradeMapper
 * @author: zhanglei
 * @date: 2019/5/14 13:49
 */
public interface DeviceUpgradeMapper {

    /**
     * 根据条件获取apk列表
     * @param versionName 版本名称
     * @param upgradeName apk名称
     * @return apk列表
     */
    Page<DeviceUpgrade> getApkList(@Param("versionName") String versionName,@Param("upgradeName") String upgradeName);

    /**
     * 根据版本名称和版本号查询apk数量
     * @param versionName 版本名称
     * @param versionCode 版本号
     * @return 存在数量
     */
    int getCountByVersionCode(@Param("versionName") String versionName,@Param("versionCode") String versionCode);

    /**
     * 新增apk数据
     * @param deviceUpgrade apk信息
     */
    void addApk(DeviceUpgrade deviceUpgrade);

    /**
     * 根据id获取apk详情
     * @param deviceUpgradeId apk的id
     * @return apk详情
     */
    DeviceUpgrade getApkById(@Param("deviceUpgradeId") Long deviceUpgradeId);

    /**
     * 编辑apk数据
     * @param deviceUpgrade apk信息
     */
    void editApk(DeviceUpgrade deviceUpgrade);

    /**
     * 根据id删除apk
     * @param deviceUpgradeId apk的id
     */
    void deleteApk(@Param("deviceUpgradeId") Long deviceUpgradeId);


    /**
     * 保存pak升级对应终端详情
     * @param deviceUpgradeId apkid
     * @param versionName 版本名称
     * @param versionCode 版本号
     * @param serialNo 当前时间
     * @param timeOut 超时时间
     * @param code 终端code
     * @param deviceUpgradeDoing 初始化状态
     */
    void insertDeviceUpgradeInfo(@Param("deviceUpgradeId") Long deviceUpgradeId, @Param("versionName") String versionName, @Param("versionCode") Integer versionCode, @Param("serialNo") Long serialNo, @Param("timeOut") Long timeOut, @Param("code") String code, @Param("deviceUpgradeDoing") int deviceUpgradeDoing);

    /**
     * 获取终端升级详情
     * @param deviceName 终端名称
     * @param deviceSerialNum 终端序列号
     * @param newTime 当前时间
     * @param deviceUpgradeId 升级apk的id
     * @return 升级详情列表
     */
    Page<DeviceUpgradeInfoVO> deviceUpgradeInfo(@Param("deviceName") String deviceName,@Param("deviceSerialNum") String deviceSerialNum,@Param("deviceUpgradeId") Long deviceUpgradeId,@Param("newTime") Long newTime);

    /**
     * 根据apkId获取升级终端的总数
     * @param deviceUpgradeId apk的id
     * @return 数量
     */
    Integer getUpgradeNum(@Param("deviceUpgradeId") Long deviceUpgradeId);

    /**
     * 根据apkId获取升级终端成功的数量
     * @param deviceUpgradeId apk的id
     * @return 数量
     */
    Integer getUpgradeSuccessNum(@Param("deviceUpgradeId") Long deviceUpgradeId);

    /**
     * 根据apkid获取升级中的终端数量
     * @param deviceUpgradeId apk的id
     * @param newTime 当前时间
     * @return 数量
     */
    Integer getUpgradeDoingNum(@Param("deviceUpgradeId") Long deviceUpgradeId,@Param("newTime") Long newTime);

    /**
     * 根据版本号的终端编码获取存在数量
     * @param versionCode apk版本号
     * @param deviceCode 终端唯一code
     * @return 数量
     */
    Integer getCountByVersionCodeAndDeviceCode(@Param("versionCode") Integer versionCode,@Param("deviceCode") String deviceCode);

    /**
     * 根据apk版本号和终端唯一编码修改升级时间
     * @param versionCode apk版本号
     * @param deviceCode 终端唯一编码
     * @param deviceUpgradeDoing 升级中状态
     * @param serialNo 当前时间
     * @param timeOut 最晚升级时间
     */
    void updeteTime(@Param("versionCode") Integer versionCode,@Param("deviceCode") String deviceCode,@Param("deviceUpgradeDoing") int deviceUpgradeDoing,@Param("serialNo") Long serialNo,@Param("timeOut") Long timeOut);
}
